package com.ruoyi.client.service.impl;

import com.ruoyi.client.mapper.ClientGoodsMapper;
import com.ruoyi.client.pojo.form.GoodsQueryPageForm;
import com.ruoyi.client.pojo.vo.GoodsDetailVo;
import com.ruoyi.client.pojo.vo.GoodsVo;
import com.ruoyi.client.service.ClientGoodsService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 商品服务实现类
 * 处理商品查询、详情获取等业务逻辑
 */
@Service
public class ClientGoodsServiceImpl implements ClientGoodsService {

    @Resource
    private ClientGoodsMapper clientGoodsMapper; // 注入商品Mapper

    /**
     * 分页查询商品列表
     * 将表单参数转换为Map传递给Mapper，解决参数类型不匹配问题
     */
    @Override
    public List<GoodsVo> queryPage(GoodsQueryPageForm form) {
        Map<String, Object> params = new HashMap<>(16);

        // 手动映射所有参数，确保关键字段正确
        params.put("pageNum", form.getPageNum());
        params.put("pageSize", form.getPageSize());
        params.put("storeId", form.getStoreId()); // 强制传递storeId
        params.put("keyword", form.getKeyword());
        // 关键：将form的status映射为Mapper需要的isOnSale
        params.put("isOnSale", form.getStatus());
        params.put("orderBy", form.getOrderBy());
        // 补充分类名称筛选参数（用于按分类查询商品）
        params.put("categoryName", form.getCategoryName());

        // 打印参数日志，方便调试
        System.out.println("商品查询参数：" + params);

        return clientGoodsMapper.queryPage(params);
    }

    /**
     * 根据ID查询商品详情（参数改为Long，与接口保持一致）
     */
    @Override
    public GoodsDetailVo selectVoById(Long id) {
        if (id == null || id <= 0) {
            throw new IllegalArgumentException("商品ID不能为空或小于等于0");
        }
        return clientGoodsMapper.selectVoById(id); // 注意：需同步修改ClientGoodsMapper的方法参数为Long
    }

    /**
     * 实现接口方法：根据店铺ID获取该店铺下的分类名称列表（去重）
     */
    @Override
    public List<String> getCategoryNamesByStoreId(Integer storeId) {
        if (storeId == null) {
            return Collections.emptyList();  // 空参数兜底，返回空列表
        }
        return clientGoodsMapper.getCategoryNamesByStoreId(storeId);
    }

    /**
     * 查询盲盒商品池（随机返回100条在售商品）
     */
    @Override
    public List<GoodsVo> queryBlindBoxGoods() {
        return clientGoodsMapper.queryBlindBoxGoods();
    }
}